package com.jch.ncud.view;

import javafx.scene.Cursor;
import javafx.scene.Parent;
import javafx.scene.control.ListView;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

// UI场景基类
public abstract class UIObject extends Stage {

    // 场景内父节点 node
    protected Parent root;

    // 桌面x坐标
    private double xOffset;

    // 桌面y坐标
    private double yOffset;

    // 获取UI页面内指定id的主键 使用css的选择器
    public <T> T $(String id, Class<T> clazz) {
        return (T) root.lookup("#" + id);
    }

    // 清空全部视图选中状态
    public void clearViewListSelectedAll(ListView<Pane>... listViews) {
        for (ListView<Pane> listView : listViews) {
            listView.getSelectionModel().clearSelection();
        }
    }

    // 拖动窗口事件
    public void move() {
        // 设置鼠标按下事件
        root.setOnMousePressed(event -> {
            xOffset = getX() - event.getSceneX();
            yOffset = getY() - event.getSceneY();
            // 设置光标 Cursor.CLOSED_HAND 指针闭合关闭，"抓取"时使用
            root.setCursor(Cursor.CLOSED_HAND);
        });
        // 设置鼠标拖动事件
        root.setOnMouseDragged(event -> {
            System.out.println("拖动窗口！");
            setX(event.getSceneX() + xOffset); // 设置X坐标
            setY(event.getSceneY() + yOffset); // 设置Y坐标
        });
        // 设置鼠标按键释放事件 将光标为默认
        root.setOnMouseReleased(event -> root.setCursor(Cursor.DEFAULT));
    }

    // 初始化页面
    public abstract void initView();

    // 初始化事件定义
    public abstract void initEventDefine();

}
